#pip install --upgrade pandas
#pip install --upgrade pandas-datareader
from pandas_datareader import data
import pandas as pd
import numpy as np
import datetime
get_ipython().run_line_magic('matplotlib', 'inline')
import seaborn as sns
sns.set_style('whitegrid')
import matplotlib.pyplot as plt
import statistics
import plotly.graph_objects as go
# Ignore error messages
import warnings
warnings.filterwarnings("ignore")
# Data Exploring : Missing Values
def find_missing_percent(data):
"""
Returns dataframe containing the total missing values and percentage of total
missing values of a column.
"""
miss_df = pd.DataFrame({'ColumnName':[],'TotalMissingVals':[],'PercentMissing':[]})
for col in list(data.columns):
sum_miss_val = data[col].isnull().sum()
percent_miss_val = round((sum_miss_val/data.shape[0])*100,2)
missinginfo = {"ColumnName" : col, "TotalMissingVals" : sum_miss_val, "PercentMissing" : percent_miss_val}
miss_df = miss_df.append(missinginfo, ignore_index = True)
miss_df = miss_df[miss_df["PercentMissing"] > 0.0]
miss_df = miss_df.reset_index(drop = True)
return miss_df
start_date = datetime.datetime(2015,1,1)
end_date = datetime.datetime(2021,1,1)
Describe the meaning of the columns
Pick one stock and do the EDA
features = ['Open', 'High', 'Low', 'Close', 'Volume']
AAPL = pd.read_csv('AAPL.csv')
AAPL.head()
| Date | Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|---|
| 0 | 2015-01-02 | 27.847500 | 27.860001 | 26.837500 | 27.332500 | 24.603203 | 212818400 |
| 1 | 2015-01-05 | 27.072500 | 27.162500 | 26.352501 | 26.562500 | 23.910093 | 257142000 |
| 2 | 2015-01-06 | 26.635000 | 26.857500 | 26.157499 | 26.565001 | 23.912340 | 263188400 |
| 3 | 2015-01-07 | 26.799999 | 27.049999 | 26.674999 | 26.937500 | 24.247646 | 160423600 |
| 4 | 2015-01-08 | 27.307501 | 28.037500 | 27.174999 | 27.972500 | 25.179296 | 237458000 |
AAPL.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1511 entries, 0 to 1510 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Date 1511 non-null object 1 Open 1511 non-null float64 2 High 1511 non-null float64 3 Low 1511 non-null float64 4 Close 1511 non-null float64 5 Adj Close 1511 non-null float64 6 Volume 1511 non-null int64 dtypes: float64(5), int64(1), object(1) memory usage: 82.8+ KB
AAPL.describe()
| Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|
| count | 1511.000000 | 1511.000000 | 1511.000000 | 1511.000000 | 1511.000000 | 1.511000e+03 |
| mean | 48.087819 | 48.604072 | 47.585723 | 48.117598 | 46.199344 | 1.459379e+08 |
| std | 25.091675 | 25.473172 | 24.677915 | 25.091074 | 25.349878 | 7.142285e+07 |
| min | 22.500000 | 22.917500 | 22.367500 | 22.584999 | 20.914917 | 4.544800e+07 |
| 25% | 29.708750 | 29.981250 | 29.561250 | 29.814999 | 27.386384 | 9.743980e+07 |
| 50% | 41.362499 | 41.882500 | 40.907501 | 41.314999 | 39.531799 | 1.280424e+08 |
| 75% | 54.127501 | 54.834999 | 53.375000 | 53.938751 | 52.017620 | 1.754606e+08 |
| max | 138.050003 | 138.789993 | 134.339996 | 136.690002 | 135.068588 | 6.488252e+08 |
# Data Exploring : Missing Values
miss_df = find_missing_percent(AAPL)
print(f"Number of columns with missing values: {miss_df.shape}")
miss_features = miss_df["ColumnName"].values
display(miss_df)
print(f"Total Missing Features {miss_features}")
Number of columns with missing values: (0, 3)
| ColumnName | TotalMissingVals | PercentMissing |
|---|
Total Missing Features []
AAPL['Close'].plot(figsize=(12,4)).set(title = "The distribution plot of close values for AAPL stock")
display()
plt.subplots(figsize=(20,10))
for i, col in enumerate(features):
plt.subplot(2,3,i+1)
sns.distplot(AAPL[col])
plt.show()
plt.subplots(figsize=(20,10))
for i, col in enumerate(features):
plt.subplot(2,3,i+1)
sns.boxplot(AAPL[col])
plt.show()
fig = go.Figure(data=[go.Candlestick(x=AAPL['Date'],
open=AAPL['Open'], high=AAPL['High'],
low=AAPL['Low'], close=AAPL['Close'])
])
fig.update_layout(xaxis_rangeslider_visible=False)
fig.show()
AMZN = pd.read_csv('AMZN.csv')
AMZN.head()
| Date | Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|---|
| 0 | 2015-01-02 | 15.6290 | 15.7375 | 15.3480 | 15.4260 | 15.4260 | 55664000 |
| 1 | 2015-01-05 | 15.3505 | 15.4190 | 15.0425 | 15.1095 | 15.1095 | 55484000 |
| 2 | 2015-01-06 | 15.1120 | 15.1500 | 14.6190 | 14.7645 | 14.7645 | 70380000 |
| 3 | 2015-01-07 | 14.8750 | 15.0640 | 14.7665 | 14.9210 | 14.9210 | 52806000 |
| 4 | 2015-01-08 | 15.0160 | 15.1570 | 14.8055 | 15.0230 | 15.0230 | 61768000 |
AMZN.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1511 entries, 0 to 1510 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Date 1511 non-null object 1 Open 1511 non-null float64 2 High 1511 non-null float64 3 Low 1511 non-null float64 4 Close 1511 non-null float64 5 Adj Close 1511 non-null float64 6 Volume 1511 non-null int64 dtypes: float64(5), int64(1), object(1) memory usage: 82.8+ KB
AMZN.describe()
| Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|
| count | 1511.000000 | 1511.000000 | 1511.000000 | 1511.000000 | 1511.000000 | 1.511000e+03 |
| mean | 68.880995 | 69.597756 | 68.059404 | 68.861214 | 68.861214 | 8.628262e+07 |
| std | 39.643048 | 40.145517 | 39.037404 | 39.599778 | 39.599778 | 4.447806e+07 |
| min | 14.314000 | 14.539500 | 14.262500 | 14.347500 | 14.347500 | 1.762600e+07 |
| 25% | 36.331001 | 36.537501 | 36.053751 | 36.393749 | 36.393749 | 5.711500e+07 |
| 50% | 60.132999 | 60.274502 | 59.425999 | 59.791500 | 59.791500 | 7.465600e+07 |
| 75% | 91.448749 | 92.278000 | 90.615250 | 91.480999 | 91.480999 | 1.019910e+08 |
| max | 177.350006 | 177.612503 | 174.334503 | 176.572495 | 176.572495 | 4.771220e+08 |
# Data Exploring : Missing Values
miss_df = find_missing_percent(AMZN)
print(f"Number of columns with missing values: {miss_df.shape}")
miss_features = miss_df["ColumnName"].values
display(miss_df)
print(f"Total Missing Features {miss_features}")
Number of columns with missing values: (0, 3)
| ColumnName | TotalMissingVals | PercentMissing |
|---|
Total Missing Features []
AMZN['Close'].plot(figsize=(12,4)).set(title = "The distribution plot of close values for AMZN stock")
display()
plt.subplots(figsize=(20,10))
for i, col in enumerate(features):
plt.subplot(2,3,i+1)
sns.distplot(AMZN[col])
plt.show()
plt.subplots(figsize=(20,10))
for i, col in enumerate(features):
plt.subplot(2,3,i+1)
sns.boxplot(AMZN[col])
plt.show()
fig = go.Figure(data=[go.Candlestick(x=AMZN['Date'],
open=AMZN['Open'], high=AMZN['High'],
low=AMZN['Low'], close=AMZN['Close'])
])
fig.update_layout(xaxis_rangeslider_visible=False)
fig.show()
NFLX = pd.read_csv('NFLX.csv')
NFLX.head()
| Date | Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|---|
| 0 | 2015-01-02 | 49.151428 | 50.331429 | 48.731430 | 49.848572 | 49.848572 | 13475000 |
| 1 | 2015-01-05 | 49.258572 | 49.258572 | 47.147144 | 47.311428 | 47.311428 | 18165000 |
| 2 | 2015-01-06 | 47.347141 | 47.639999 | 45.661430 | 46.501431 | 46.501431 | 16037700 |
| 3 | 2015-01-07 | 47.347141 | 47.421429 | 46.271427 | 46.742859 | 46.742859 | 9849700 |
| 4 | 2015-01-08 | 47.119999 | 47.835712 | 46.478573 | 47.779999 | 47.779999 | 9601900 |
NFLX.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1511 entries, 0 to 1510 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Date 1511 non-null object 1 Open 1511 non-null float64 2 High 1511 non-null float64 3 Low 1511 non-null float64 4 Close 1511 non-null float64 5 Adj Close 1511 non-null float64 6 Volume 1511 non-null int64 dtypes: float64(5), int64(1), object(1) memory usage: 82.8+ KB
NFLX.describe()
| Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|
| count | 1511.000000 | 1511.000000 | 1511.000000 | 1511.000000 | 1511.000000 | 1.511000e+03 |
| mean | 242.401258 | 246.232520 | 238.427909 | 242.517075 | 242.517075 | 1.071030e+07 |
| std | 136.995001 | 139.306111 | 134.564590 | 137.059678 | 137.059678 | 8.266190e+06 |
| min | 46.021427 | 46.785713 | 45.264286 | 45.547142 | 45.547142 | 1.144000e+06 |
| 25% | 110.110000 | 112.040001 | 107.459999 | 110.114998 | 110.114998 | 5.593000e+06 |
| 50% | 201.949997 | 204.380005 | 198.089996 | 202.679993 | 202.679993 | 8.315600e+06 |
| 75% | 353.600006 | 359.065002 | 348.074997 | 353.384995 | 353.384995 | 1.302200e+07 |
| max | 567.979980 | 575.369995 | 541.000000 | 556.549988 | 556.549988 | 1.045009e+08 |
# Data Exploring : Missing Values
miss_df = find_missing_percent(NFLX)
print(f"Number of columns with missing values: {miss_df.shape}")
miss_features = miss_df["ColumnName"].values
display(miss_df)
print(f"Total Missing Features {miss_features}")
Number of columns with missing values: (0, 3)
| ColumnName | TotalMissingVals | PercentMissing |
|---|
Total Missing Features []
NFLX['Close'].plot(figsize=(12,4)).set(title = "The distribution plot of close values for NFLX stock")
display()
plt.subplots(figsize=(20,10))
for i, col in enumerate(features):
plt.subplot(2,3,i+1)
sns.distplot(NFLX[col])
plt.show()
plt.subplots(figsize=(20,10))
for i, col in enumerate(features):
plt.subplot(2,3,i+1)
sns.boxplot(NFLX[col])
plt.show()
fig = go.Figure(data=[go.Candlestick(x=NFLX['Date'],
open=NFLX['Open'], high=NFLX['High'],
low=NFLX['Low'], close=NFLX['Close'])
])
fig.update_layout(xaxis_rangeslider_visible=False)
fig.show()
GOOG = pd.read_csv('GOOG.csv')
GOOG.head()
| Date | Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|---|
| 0 | 2015-01-02 | 26.378078 | 26.490770 | 26.133251 | 26.168653 | 26.168653 | 28951268 |
| 1 | 2015-01-05 | 26.091366 | 26.144720 | 25.582764 | 25.623152 | 25.623152 | 41196796 |
| 2 | 2015-01-06 | 25.679497 | 25.738087 | 24.983908 | 25.029282 | 25.029282 | 57998800 |
| 3 | 2015-01-07 | 25.280592 | 25.292759 | 24.914099 | 24.986401 | 24.986401 | 41301082 |
| 4 | 2015-01-08 | 24.831326 | 25.105074 | 24.482782 | 25.065184 | 25.065184 | 67071641 |
GOOG.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1511 entries, 0 to 1510 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Date 1511 non-null object 1 Open 1511 non-null float64 2 High 1511 non-null float64 3 Low 1511 non-null float64 4 Close 1511 non-null float64 5 Adj Close 1511 non-null float64 6 Volume 1511 non-null int64 dtypes: float64(5), int64(1), object(1) memory usage: 82.8+ KB
GOOG.describe()
| Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|
| count | 1511.000000 | 1511.000000 | 1511.000000 | 1511.000000 | 1511.000000 | 1.511000e+03 |
| mean | 50.406994 | 50.894590 | 49.936483 | 50.434176 | 50.434176 | 3.475792e+07 |
| std | 15.349151 | 15.558849 | 15.184162 | 15.375751 | 15.375751 | 1.676414e+07 |
| min | 24.664783 | 24.730902 | 24.311253 | 24.560070 | 24.560070 | 6.936000e+06 |
| 25% | 37.648001 | 37.949551 | 37.317001 | 37.592999 | 37.592999 | 2.484100e+07 |
| 50% | 51.399502 | 52.102501 | 50.845001 | 51.435501 | 51.435501 | 3.050400e+07 |
| 75% | 59.783249 | 60.244749 | 59.341751 | 59.856248 | 59.856248 | 3.946600e+07 |
| max | 91.225998 | 92.360001 | 91.132500 | 91.399498 | 91.399498 | 2.232980e+08 |
# Data Exploring : Missing Values
miss_df = find_missing_percent(GOOG)
print(f"Number of columns with missing values: {miss_df.shape}")
miss_features = miss_df["ColumnName"].values
display(miss_df)
print(f"Total Missing Features {miss_features}")
Number of columns with missing values: (0, 3)
| ColumnName | TotalMissingVals | PercentMissing |
|---|
Total Missing Features []
GOOG['Close'].plot(figsize=(12,4)).set(title = "The distribution plot of close values for GOOG stock")
display()
plt.subplots(figsize=(20,10))
for i, col in enumerate(features):
plt.subplot(2,3,i+1)
sns.distplot(GOOG[col])
plt.show()
plt.subplots(figsize=(20,10))
for i, col in enumerate(features):
plt.subplot(2,3,i+1)
sns.boxplot(GOOG[col])
plt.show()
fig = go.Figure(data=[go.Candlestick(x=GOOG['Date'],
open=GOOG['Open'], high=GOOG['High'],
low=GOOG['Low'], close=GOOG['Close'])
])
fig.update_layout(xaxis_rangeslider_visible=False)
fig.show()
TSLA = pd.read_csv('TSLA.csv')
TSLA.head()
| Date | Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|---|
| 0 | 2015-01-02 | 14.858000 | 14.883333 | 14.217333 | 14.620667 | 14.620667 | 71466000 |
| 1 | 2015-01-05 | 14.303333 | 14.433333 | 13.810667 | 14.006000 | 14.006000 | 80527500 |
| 2 | 2015-01-06 | 14.004000 | 14.280000 | 13.614000 | 14.085333 | 14.085333 | 93928500 |
| 3 | 2015-01-07 | 14.223333 | 14.318667 | 13.985333 | 14.063333 | 14.063333 | 44526000 |
| 4 | 2015-01-08 | 14.187333 | 14.253333 | 14.000667 | 14.041333 | 14.041333 | 51637500 |
TSLA.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1511 entries, 0 to 1510 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Date 1511 non-null object 1 Open 1511 non-null float64 2 High 1511 non-null float64 3 Low 1511 non-null float64 4 Close 1511 non-null float64 5 Adj Close 1511 non-null float64 6 Volume 1511 non-null int64 dtypes: float64(5), int64(1), object(1) memory usage: 82.8+ KB
TSLA.describe()
| Open | High | Low | Close | Adj Close | Volume | |
|---|---|---|---|---|---|---|
| count | 1511.000000 | 1511.000000 | 1511.000000 | 1511.000000 | 1511.000000 | 1.511000e+03 |
| mean | 31.055770 | 31.758800 | 30.331243 | 31.111681 | 31.111681 | 1.203264e+08 |
| std | 37.301391 | 38.356045 | 36.204387 | 37.497484 | 37.497484 | 8.888718e+07 |
| min | 9.488000 | 10.331333 | 9.403333 | 9.578000 | 9.578000 | 1.062000e+07 |
| 25% | 15.179666 | 15.392000 | 14.941333 | 15.141334 | 15.141334 | 6.389475e+07 |
| 50% | 18.886000 | 19.224667 | 18.511333 | 18.945333 | 18.945333 | 9.243900e+07 |
| 75% | 23.171333 | 23.492668 | 22.817334 | 23.165000 | 23.165000 | 1.433830e+08 |
| max | 233.330002 | 239.573334 | 230.373337 | 235.223328 | 235.223328 | 9.140820e+08 |
# Data Exploring : Missing Values
miss_df = find_missing_percent(TSLA)
print(f"Number of columns with missing values: {miss_df.shape}")
miss_features = miss_df["ColumnName"].values
display(miss_df)
print(f"Total Missing Features {miss_features}")
Number of columns with missing values: (0, 3)
| ColumnName | TotalMissingVals | PercentMissing |
|---|
Total Missing Features []
TSLA['Close'].plot(figsize=(12,4)).set(title = "The distribution plot of close values for TSLA stock")
display()
plt.subplots(figsize=(20,10))
for i, col in enumerate(features):
plt.subplot(2,3,i+1)
sns.distplot(TSLA[col])
plt.show()
plt.subplots(figsize=(20,10))
for i, col in enumerate(features):
plt.subplot(2,3,i+1)
sns.boxplot(TSLA[col])
plt.show()
fig = go.Figure(data=[go.Candlestick(x=TSLA['Date'],
open=TSLA['Open'], high=TSLA['High'],
low=TSLA['Low'], close=TSLA['Close'])
])
fig.update_layout(xaxis_rangeslider_visible=False)
fig.show()
Create a new Data-frame, titled "Return". This Data-frame will contain the returns for each stock data that you had crawled above.
list_stocksStr = ['AAPL', 'AMZN', 'NFLX', 'GOOG', 'TSLA']
list_stocks = [AAPL, AMZN, NFLX, GOOG, TSLA]
for data in list_stocks:
data.index = data.Date
data = data.drop(['Date'], axis = 1)
stocks = pd.concat(list_stocks, axis = 1, keys = list_stocksStr)
stocks.columns.names = ['Stock Name', 'Stock Info']
stocks.head()
| Stock Name | AAPL | AMZN | ... | GOOG | TSLA | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Stock Info | Date | Open | High | Low | Close | Adj Close | Volume | Date | Open | High | ... | Close | Adj Close | Volume | Date | Open | High | Low | Close | Adj Close | Volume |
| Date | |||||||||||||||||||||
| 2015-01-02 | 2015-01-02 | 27.847500 | 27.860001 | 26.837500 | 27.332500 | 24.603203 | 212818400 | 2015-01-02 | 15.6290 | 15.7375 | ... | 26.168653 | 26.168653 | 28951268 | 2015-01-02 | 14.858000 | 14.883333 | 14.217333 | 14.620667 | 14.620667 | 71466000 |
| 2015-01-05 | 2015-01-05 | 27.072500 | 27.162500 | 26.352501 | 26.562500 | 23.910093 | 257142000 | 2015-01-05 | 15.3505 | 15.4190 | ... | 25.623152 | 25.623152 | 41196796 | 2015-01-05 | 14.303333 | 14.433333 | 13.810667 | 14.006000 | 14.006000 | 80527500 |
| 2015-01-06 | 2015-01-06 | 26.635000 | 26.857500 | 26.157499 | 26.565001 | 23.912340 | 263188400 | 2015-01-06 | 15.1120 | 15.1500 | ... | 25.029282 | 25.029282 | 57998800 | 2015-01-06 | 14.004000 | 14.280000 | 13.614000 | 14.085333 | 14.085333 | 93928500 |
| 2015-01-07 | 2015-01-07 | 26.799999 | 27.049999 | 26.674999 | 26.937500 | 24.247646 | 160423600 | 2015-01-07 | 14.8750 | 15.0640 | ... | 24.986401 | 24.986401 | 41301082 | 2015-01-07 | 14.223333 | 14.318667 | 13.985333 | 14.063333 | 14.063333 | 44526000 |
| 2015-01-08 | 2015-01-08 | 27.307501 | 28.037500 | 27.174999 | 27.972500 | 25.179296 | 237458000 | 2015-01-08 | 15.0160 | 15.1570 | ... | 25.065184 | 25.065184 | 67071641 | 2015-01-08 | 14.187333 | 14.253333 | 14.000667 | 14.041333 | 14.041333 | 51637500 |
5 rows × 35 columns
Return = pd.DataFrame()
Return['AAPL ' + 'value_stock'] = stocks.AAPL.Close.pct_change()
Return['AMZN ' + 'value_stock'] = stocks.AMZN.Close.pct_change()
Return['NFLX ' + 'value_stock'] = stocks.NFLX.Close.pct_change()
Return['GOOG ' + 'value_stock'] = stocks.GOOG.Close.pct_change()
Return['TSLA ' + 'value_stock'] = stocks.TSLA.Close.pct_change()
Return.head()
| AAPL value_stock | AMZN value_stock | NFLX value_stock | GOOG value_stock | TSLA value_stock | |
|---|---|---|---|---|---|
| Date | |||||
| 2015-01-02 | NaN | NaN | NaN | NaN | NaN |
| 2015-01-05 | -0.028172 | -0.020517 | -0.050897 | -0.020846 | -0.042041 |
| 2015-01-06 | 0.000094 | -0.022833 | -0.017121 | -0.023177 | 0.005664 |
| 2015-01-07 | 0.014022 | 0.010600 | 0.005192 | -0.001713 | -0.001562 |
| 2015-01-08 | 0.038422 | 0.006836 | 0.022188 | 0.003153 | -0.001564 |
Return.dropna(inplace = True)
Return.head()
| AAPL value_stock | AMZN value_stock | NFLX value_stock | GOOG value_stock | TSLA value_stock | |
|---|---|---|---|---|---|
| Date | |||||
| 2015-01-05 | -0.028172 | -0.020517 | -0.050897 | -0.020846 | -0.042041 |
| 2015-01-06 | 0.000094 | -0.022833 | -0.017121 | -0.023177 | 0.005664 |
| 2015-01-07 | 0.014022 | 0.010600 | 0.005192 | -0.001713 | -0.001562 |
| 2015-01-08 | 0.038422 | 0.006836 | 0.022188 | 0.003153 | -0.001564 |
| 2015-01-09 | 0.001073 | -0.011749 | -0.015458 | -0.012951 | -0.018802 |
Figure out on what dates each stock had the best and worst single-day returns on returns data.
print('Dates each stock had the best single-day returns on returns data:')
Return.idxmax()
Dates each stock had the best single-day returns on returns data:
AAPL value_stock 2020-03-13 AMZN value_stock 2015-04-24 NFLX value_stock 2016-10-18 GOOG value_stock 2015-07-17 TSLA value_stock 2020-02-03 dtype: object
print('Dates each stock had the worst single-day returns on returns data:')
Return.idxmin()
Dates each stock had the worst single-day returns on returns data:
AAPL value_stock 2020-03-16 AMZN value_stock 2020-03-12 NFLX value_stock 2016-07-19 GOOG value_stock 2020-03-16 TSLA value_stock 2020-09-08 dtype: object
Take a look at the standard deviation of the returns, which stock would you classify as the riskiest over the entire time period? Which would you classify as the riskiest for the year 2020?
Return.std()
AAPL value_stock 0.018680 AMZN value_stock 0.019519 NFLX value_stock 0.026743 GOOG value_stock 0.016961 TSLA value_stock 0.034746 dtype: float64
Return.reset_index().std()
AAPL value_stock 0.018680 AMZN value_stock 0.019519 NFLX value_stock 0.026743 GOOG value_stock 0.016961 TSLA value_stock 0.034746 dtype: float64
Create a distribution plot of the 2020 returns for each stock.
AAPL value_stock in 2020
sns.distplot(Return.loc['2020-01-01':'2020-12-31']['AAPL value_stock'],bins=100).set(title = "The distribution plot of the 2020 returns for AAPL stock")
display()
AMZN value_stock in 2020
sns.distplot(Return.loc['2020-01-01':'2020-12-31']['AMZN value_stock'],color = 'green',bins=100).set(title = "The distribution plot of the 2020 returns for AMZN stock")
display()
NFLX value_stock in 2020
sns.distplot(Return.loc['2020-01-01':'2020-12-31']['NFLX value_stock'],color='red',bins=100).set(title = "The distribution plot of the 2020 returns for NFLX stock")
display()
GOOG value_stock in 2020
sns.distplot(Return.loc['2020-01-01':'2020-12-31']['GOOG value_stock'],color='brown',bins=100).set(title = "The distribution plot of the 2020 returns for GOOG stock")
display()
TSLA value_stock in 2020
sns.distplot(Return.loc['2020-01-01':'2020-12-31']['TSLA value_stock'],color='purple',bins=100).set(title = "The distribution plot of the 2020 returns for TSLA stock")
display()
Create a line plot showing the Close price for each stock for the entire index of time.
stocks.xs('Close', level='Stock Info', axis = 1).plot(figsize=(12,4)).set(title = "The line plot showing the Close price for each stock for the entire index of time")
display()
#pip install xgboost
#pip install keras
#pip install tensorflow
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from xgboost import XGBClassifier
from sklearn import metrics
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense
from keras.layers import Dropout
AAPL.index = AAPL.Date
AAPL = AAPL.drop(['Date', 'Adj Close'], axis = 1)
AAPL.loc['2015-01-02':'2019-12-31'].to_csv('trainAAPL.csv', index = False)
AAPL.loc['2019-12-31':].to_csv('testAAPL.csv', index = False)
AAPL_train = pd.read_csv('trainAAPL.csv')
AAPL_train = AAPL_train.iloc[:, 1:2].values
print(AAPL_train.shape)
(1258, 1)
scaler = MinMaxScaler(feature_range = (0,1))
scaled_training_set = scaler.fit_transform(AAPL_train)
scaled_training_set
array([[0.09772617],
[0.08393475],
[0.0779041 ],
...,
[1. ],
[0.99367278],
[0.99856645]])
X_train = []
y_train = []
for i in range(60, len(AAPL_train)):
X_train.append(scaled_training_set[i-60:i, 0])
y_train.append(scaled_training_set[i, 0])
X_train = np.array(X_train)
y_train = np.array(y_train)
print(X_train.shape)
print(y_train.shape)
(1198, 60) (1198,)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
X_train.shape
(1198, 60, 1)
regressor = Sequential()
regressor.add(LSTM(units = 60, return_sequences = True, input_shape = (X_train.shape[1], X_train.shape[2])))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60, return_sequences = True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60, return_sequences = True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60))
regressor.add(Dropout(0.2))
regressor.add(Dense(units = 1))
regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
regressor.fit(X_train, y_train, epochs = 100, batch_size = 32)
Epoch 1/100 38/38 [==============================] - 9s 57ms/step - loss: 0.0189 Epoch 2/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0035 Epoch 3/100 38/38 [==============================] - 2s 58ms/step - loss: 0.0031 Epoch 4/100 38/38 [==============================] - 2s 57ms/step - loss: 0.0027 Epoch 5/100 38/38 [==============================] - 2s 58ms/step - loss: 0.0028 Epoch 6/100 38/38 [==============================] - 2s 58ms/step - loss: 0.0030 Epoch 7/100 38/38 [==============================] - 2s 58ms/step - loss: 0.0024 Epoch 8/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0033 Epoch 9/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0027 Epoch 10/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0023 Epoch 11/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0021 Epoch 12/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0020 Epoch 13/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0020 Epoch 14/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0019 Epoch 15/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0020 Epoch 16/100 38/38 [==============================] - 3s 71ms/step - loss: 0.0021 Epoch 17/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0024 Epoch 18/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0017 Epoch 19/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0018 Epoch 20/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0018 Epoch 21/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0018 Epoch 22/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0017 Epoch 23/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0018 Epoch 24/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0015 Epoch 25/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0016 Epoch 26/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0016 Epoch 27/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0017 Epoch 28/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0015 Epoch 29/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0015 Epoch 30/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0014 Epoch 31/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0014 Epoch 32/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0015 Epoch 33/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0013 Epoch 34/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0014 Epoch 35/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0012 Epoch 36/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0013 Epoch 37/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0012 Epoch 38/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0014 Epoch 39/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0012 Epoch 40/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0013 Epoch 41/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0014 Epoch 42/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0014 Epoch 43/100 38/38 [==============================] - 2s 66ms/step - loss: 0.0014 Epoch 44/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0012 Epoch 45/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0011 Epoch 46/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0011 Epoch 47/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0010 Epoch 48/100 38/38 [==============================] - 2s 66ms/step - loss: 0.0011 Epoch 49/100 38/38 [==============================] - 3s 71ms/step - loss: 0.0011 Epoch 50/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0011 Epoch 51/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0013 Epoch 52/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0012 Epoch 53/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0011 Epoch 54/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0013 Epoch 55/100 38/38 [==============================] - 3s 71ms/step - loss: 9.5305e-04 Epoch 56/100 38/38 [==============================] - 3s 67ms/step - loss: 9.6441e-04 Epoch 57/100 38/38 [==============================] - 2s 64ms/step - loss: 9.6301e-04 Epoch 58/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0011 Epoch 59/100 38/38 [==============================] - 2s 61ms/step - loss: 9.2438e-04 Epoch 60/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0012 Epoch 61/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0012 Epoch 62/100 38/38 [==============================] - 3s 71ms/step - loss: 0.0011 Epoch 63/100 38/38 [==============================] - 2s 64ms/step - loss: 9.9712e-04 Epoch 64/100 38/38 [==============================] - 2s 64ms/step - loss: 9.5648e-04 Epoch 65/100 38/38 [==============================] - 2s 65ms/step - loss: 9.9899e-04 Epoch 66/100 38/38 [==============================] - 2s 63ms/step - loss: 8.9274e-04 Epoch 67/100 38/38 [==============================] - 2s 62ms/step - loss: 9.2956e-04 Epoch 68/100 38/38 [==============================] - 2s 66ms/step - loss: 9.4015e-04 Epoch 69/100 38/38 [==============================] - 2s 65ms/step - loss: 9.0565e-04 Epoch 70/100 38/38 [==============================] - 2s 61ms/step - loss: 9.6534e-04 Epoch 71/100 38/38 [==============================] - 2s 61ms/step - loss: 9.3712e-04 Epoch 72/100 38/38 [==============================] - 2s 64ms/step - loss: 8.9996e-04 Epoch 73/100 38/38 [==============================] - 3s 66ms/step - loss: 8.9270e-04 Epoch 74/100 38/38 [==============================] - 2s 65ms/step - loss: 8.9639e-04 Epoch 75/100 38/38 [==============================] - 3s 73ms/step - loss: 8.9517e-04 Epoch 76/100 38/38 [==============================] - 3s 67ms/step - loss: 8.3268e-04 Epoch 77/100 38/38 [==============================] - 2s 64ms/step - loss: 7.8343e-04 Epoch 78/100 38/38 [==============================] - 3s 69ms/step - loss: 8.3671e-04 Epoch 79/100 38/38 [==============================] - 3s 78ms/step - loss: 8.7742e-04 Epoch 80/100 38/38 [==============================] - 3s 71ms/step - loss: 8.2586e-04 Epoch 81/100 38/38 [==============================] - 3s 81ms/step - loss: 8.4001e-04 Epoch 82/100 38/38 [==============================] - 3s 83ms/step - loss: 0.0011 Epoch 83/100 38/38 [==============================] - 3s 86ms/step - loss: 9.3486e-04 Epoch 84/100 38/38 [==============================] - 3s 74ms/step - loss: 7.9684e-04 Epoch 85/100 38/38 [==============================] - 2s 64ms/step - loss: 8.9785e-04 Epoch 86/100 38/38 [==============================] - 3s 76ms/step - loss: 9.6299e-04 Epoch 87/100 38/38 [==============================] - 3s 78ms/step - loss: 7.8466e-04 Epoch 88/100 38/38 [==============================] - 2s 65ms/step - loss: 8.4333e-04 Epoch 89/100 38/38 [==============================] - 2s 63ms/step - loss: 8.5974e-04 Epoch 90/100 38/38 [==============================] - 2s 63ms/step - loss: 8.7955e-04 Epoch 91/100 38/38 [==============================] - 2s 61ms/step - loss: 8.6807e-04 Epoch 92/100 38/38 [==============================] - 2s 65ms/step - loss: 8.0630e-04 Epoch 93/100 38/38 [==============================] - 3s 67ms/step - loss: 7.5979e-04 Epoch 94/100 38/38 [==============================] - 2s 63ms/step - loss: 8.0772e-04 Epoch 95/100 38/38 [==============================] - 2s 65ms/step - loss: 8.2527e-04 Epoch 96/100 38/38 [==============================] - 2s 60ms/step - loss: 7.3097e-04 Epoch 97/100 38/38 [==============================] - 2s 62ms/step - loss: 8.3629e-04 Epoch 98/100 38/38 [==============================] - 2s 61ms/step - loss: 8.0500e-04 Epoch 99/100 38/38 [==============================] - 3s 68ms/step - loss: 8.3726e-04 Epoch 100/100 38/38 [==============================] - 3s 68ms/step - loss: 7.1209e-04
<keras.callbacks.History at 0x29c7218dc70>
AAPL_test = pd.read_csv('testAAPL.csv')
actual_stock_price = AAPL_test.iloc[:, 1:2].values
AAPL_total = AAPL.Open
inputs = AAPL_total[len(AAPL_total) - len(AAPL_test) - 60:].values
inputs = inputs.reshape(-1, 1)
inputs = scaler.transform(inputs)
X_test = []
for i in range(60,len(AAPL_test)):
X_test.append(inputs[i-60:i, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
predicted_stock_price = regressor.predict(X_test)
predicted_stock_price = scaler.inverse_transform(predicted_stock_price)
7/7 [==============================] - 2s 15ms/step
plt.plot(actual_stock_price, color = 'red', label = 'Actual AAPL stock price')
plt.plot(predicted_stock_price, color = 'blue', label = 'Predicted AAPL stock price')
plt.title('AAPL price prediction')
plt.ylabel('AAPL Stock Price')
plt.legend()
<matplotlib.legend.Legend at 0x29c7eb18550>
metrics.explained_variance_score(actual_stock_price[:len(predicted_stock_price)], predicted_stock_price)
0.9661198546185813
AMZN.index = AMZN.Date
AMZN = AMZN.drop(['Date', 'Adj Close'], axis = 1)
AMZN.loc['2015-01-02':'2019-12-31'].to_csv('trainAMZN.csv', index = False)
AMZN.loc['2019-12-31':].to_csv('testAMZN.csv', index = False)
AMZN_train = pd.read_csv('trainAMZN.csv')
AMZN_train = AMZN_train.iloc[:, 1:2].values
print(AMZN_train.shape)
(1258, 1)
scaler = MinMaxScaler(feature_range = (0,1))
scaled_training_set = scaler.fit_transform(AMZN_train)
scaled_training_set
array([[0.01361588],
[0.00999597],
[0.00693864],
...,
[0.91527011],
[0.90538208],
[0.88791335]])
X_train = []
y_train = []
for i in range(60, len(AMZN_train)):
X_train.append(scaled_training_set[i-60:i, 0])
y_train.append(scaled_training_set[i, 0])
X_train = np.array(X_train)
y_train = np.array(y_train)
print(X_train.shape)
print(y_train.shape)
(1198, 60) (1198,)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
X_train.shape
(1198, 60, 1)
regressor = Sequential()
regressor.add(LSTM(units = 60, return_sequences = True, input_shape = (X_train.shape[1],X_train.shape[2] )))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60, return_sequences = True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60, return_sequences = True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60))
regressor.add(Dropout(0.2))
regressor.add(Dense(units = 1))
regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
regressor.fit(X_train, y_train, epochs = 100, batch_size = 32)
Epoch 1/100 38/38 [==============================] - 9s 55ms/step - loss: 0.0421 Epoch 2/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0052 Epoch 3/100 38/38 [==============================] - 2s 56ms/step - loss: 0.0042 Epoch 4/100 38/38 [==============================] - 2s 66ms/step - loss: 0.0046 Epoch 5/100 38/38 [==============================] - 3s 80ms/step - loss: 0.0048 Epoch 6/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0039 Epoch 7/100 38/38 [==============================] - 3s 74ms/step - loss: 0.0040 Epoch 8/100 38/38 [==============================] - 3s 74ms/step - loss: 0.0047 Epoch 9/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0033 Epoch 10/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0029 Epoch 11/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0034 Epoch 12/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0037 Epoch 13/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0036 Epoch 14/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0033 Epoch 15/100 38/38 [==============================] - 3s 79ms/step - loss: 0.0033 Epoch 16/100 38/38 [==============================] - 3s 71ms/step - loss: 0.0030 Epoch 17/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0040 Epoch 18/100 38/38 [==============================] - 3s 72ms/step - loss: 0.0035 Epoch 19/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0027 Epoch 20/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0028 Epoch 21/100 38/38 [==============================] - 3s 77ms/step - loss: 0.0029 Epoch 22/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0027 Epoch 23/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0027 Epoch 24/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0026 Epoch 25/100 38/38 [==============================] - 3s 78ms/step - loss: 0.0025 Epoch 26/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0025 Epoch 27/100 38/38 [==============================] - 3s 82ms/step - loss: 0.0024 Epoch 28/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0026 Epoch 29/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0026 Epoch 30/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0023 Epoch 31/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0025 Epoch 32/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0025 Epoch 33/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0023 Epoch 34/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0025 Epoch 35/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0025 Epoch 36/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0025 Epoch 37/100 38/38 [==============================] - 3s 73ms/step - loss: 0.0028 Epoch 38/100 38/38 [==============================] - 3s 76ms/step - loss: 0.0025 Epoch 39/100 38/38 [==============================] - 3s 82ms/step - loss: 0.0022 Epoch 40/100 38/38 [==============================] - 3s 71ms/step - loss: 0.0020 Epoch 41/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0023 Epoch 42/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0022 Epoch 43/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0019 Epoch 44/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0020 Epoch 45/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0021 Epoch 46/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0022 Epoch 47/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0025 Epoch 48/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0020 Epoch 49/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0021 Epoch 50/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0019 Epoch 51/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0022 Epoch 52/100 38/38 [==============================] - 3s 73ms/step - loss: 0.0021 Epoch 53/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0017 Epoch 54/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0020 Epoch 55/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0023 Epoch 56/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0019 Epoch 57/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0023 Epoch 58/100 38/38 [==============================] - 3s 72ms/step - loss: 0.0017 Epoch 59/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0018 Epoch 60/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0021 Epoch 61/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0018 Epoch 62/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0016 Epoch 63/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0020 Epoch 64/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0018 Epoch 65/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0020 Epoch 66/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0015 Epoch 67/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0017 Epoch 68/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0016 Epoch 69/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0017 Epoch 70/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0018 Epoch 71/100 38/38 [==============================] - 3s 71ms/step - loss: 0.0017 Epoch 72/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0017 Epoch 73/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0015 Epoch 74/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0016 Epoch 75/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0016 Epoch 76/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0019 Epoch 77/100 38/38 [==============================] - 3s 72ms/step - loss: 0.0015 Epoch 78/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0014 Epoch 79/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0015 Epoch 80/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0018 Epoch 81/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0016 Epoch 82/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0015 Epoch 83/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0013 Epoch 84/100 38/38 [==============================] - 3s 72ms/step - loss: 0.0015 Epoch 85/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0014 Epoch 86/100 38/38 [==============================] - 2s 66ms/step - loss: 0.0013 Epoch 87/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0013 Epoch 88/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0015 Epoch 89/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0016 Epoch 90/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0015 Epoch 91/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0014 Epoch 92/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0012 Epoch 93/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0017 Epoch 94/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0015 Epoch 95/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0016 Epoch 96/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0013 Epoch 97/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0013 Epoch 98/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0012 Epoch 99/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0012 Epoch 100/100 38/38 [==============================] - 2s 66ms/step - loss: 0.0014
<keras.callbacks.History at 0x29c7f2caa90>
AMZN_test = pd.read_csv('testAMZN.csv')
actual_stock_price = AMZN_test.iloc[:, 1:2].values
AMZN_total = AMZN.Open
inputs = AMZN_total[len(AMZN_total) - len(AMZN_test) - 60:].values
inputs = inputs.reshape(-1, 1)
inputs = scaler.transform(inputs)
X_test = []
for i in range(60,len(AMZN_test)):
X_test.append(inputs[i-60:i, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
predicted_stock_price = regressor.predict(X_test)
predicted_stock_price = scaler.inverse_transform(predicted_stock_price)
7/7 [==============================] - 1s 22ms/step
plt.plot(actual_stock_price, color = 'red', label = 'Actual AMZN stock price')
plt.plot(predicted_stock_price, color = 'blue', label = 'Predicted AMZN stock price')
plt.title('AMZN price prediction')
plt.ylabel('AMZN Stock Price')
plt.legend()
<matplotlib.legend.Legend at 0x29c0b619be0>
metrics.explained_variance_score(actual_stock_price[:len(predicted_stock_price)], predicted_stock_price)
0.7532163626972936
NFLX.index = NFLX.Date
NFLX = NFLX.drop(['Date', 'Adj Close'], axis = 1)
NFLX.loc['2015-01-02':'2019-12-31'].to_csv('trainNFLX.csv', index = False)
NFLX.loc['2019-12-31':].to_csv('testNFLX.csv', index = False)
NFLX_train = pd.read_csv('trainNFLX.csv')
NFLX_train = NFLX_train.iloc[:, 1:2].values
print(NFLX_train.shape)
(1258, 1)
scaler = MinMaxScaler(feature_range = (0,1))
scaled_training_set = scaler.fit_transform(NFLX_train)
scaled_training_set
array([[0.00941947],
[0.00656934],
[0.00226948],
...,
[0.76252864],
[0.75022868],
[0.73888513]])
X_train = []
y_train = []
for i in range(60, len(NFLX_train)):
X_train.append(scaled_training_set[i-60:i, 0])
y_train.append(scaled_training_set[i, 0])
X_train = np.array(X_train)
y_train = np.array(y_train)
print(X_train.shape)
print(y_train.shape)
(1198, 60) (1198,)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
X_train.shape
(1198, 60, 1)
regressor = Sequential()
regressor.add(LSTM(units = 60, return_sequences = True, input_shape = (X_train.shape[1], X_train.shape[2])))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60, return_sequences = True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60, return_sequences = True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60))
regressor.add(Dropout(0.2))
regressor.add(Dense(units = 1))
regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
regressor.fit(X_train, y_train, epochs = 100, batch_size = 32)
Epoch 1/100 38/38 [==============================] - 9s 58ms/step - loss: 0.0386 Epoch 2/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0059 Epoch 3/100 38/38 [==============================] - 2s 60ms/step - loss: 0.0048 Epoch 4/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0049 Epoch 5/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0050 Epoch 6/100 38/38 [==============================] - 3s 75ms/step - loss: 0.0043 Epoch 7/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0041 Epoch 8/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0038 Epoch 9/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0036 Epoch 10/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0038 Epoch 11/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0041 Epoch 12/100 38/38 [==============================] - 3s 73ms/step - loss: 0.0042 Epoch 13/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0030 Epoch 14/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0033 Epoch 15/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0031 Epoch 16/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0030 Epoch 17/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0037 Epoch 18/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0032 Epoch 19/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0030 Epoch 20/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0032 Epoch 21/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0028 Epoch 22/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0030 Epoch 23/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0030 Epoch 24/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0029 Epoch 25/100 38/38 [==============================] - 3s 77ms/step - loss: 0.0030 Epoch 26/100 38/38 [==============================] - 3s 74ms/step - loss: 0.0032 Epoch 27/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0025 Epoch 28/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0025 Epoch 29/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0029 Epoch 30/100 38/38 [==============================] - 2s 66ms/step - loss: 0.0023 Epoch 31/100 38/38 [==============================] - 3s 73ms/step - loss: 0.0027 Epoch 32/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0025 Epoch 33/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0027 Epoch 34/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0030 Epoch 35/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0025 Epoch 36/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0022 Epoch 37/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0023 Epoch 38/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0023 Epoch 39/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0025 Epoch 40/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0024 Epoch 41/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0025 Epoch 42/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0026 Epoch 43/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0022 Epoch 44/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0021 Epoch 45/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0020 Epoch 46/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0020 Epoch 47/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0021 Epoch 48/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0022 Epoch 49/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0021 Epoch 50/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0019 Epoch 51/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0019 Epoch 52/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0023 Epoch 53/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0019 Epoch 54/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0020 Epoch 55/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0018 Epoch 56/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0018 Epoch 57/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0017 Epoch 58/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0018 Epoch 59/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0019 Epoch 60/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0016 Epoch 61/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0019 Epoch 62/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0017 Epoch 63/100 38/38 [==============================] - 3s 72ms/step - loss: 0.0017 Epoch 64/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0017 Epoch 65/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0016 Epoch 66/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0015 Epoch 67/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0016 Epoch 68/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0019 Epoch 69/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0015 Epoch 70/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0014 Epoch 71/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0016 Epoch 72/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0015 Epoch 73/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0013 Epoch 74/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0019 Epoch 75/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0014 Epoch 76/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0013 Epoch 77/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0013 Epoch 78/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0014 Epoch 79/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0013 Epoch 80/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0013 Epoch 81/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0015 Epoch 82/100 38/38 [==============================] - 3s 72ms/step - loss: 0.0014 Epoch 83/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0014 Epoch 84/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0013 Epoch 85/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0013 Epoch 86/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0013 Epoch 87/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0013 Epoch 88/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0012 Epoch 89/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0013 Epoch 90/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0013 Epoch 91/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0013 Epoch 92/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0012 Epoch 93/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0012 Epoch 94/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0013 Epoch 95/100 38/38 [==============================] - 3s 73ms/step - loss: 0.0013 Epoch 96/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0013 Epoch 97/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0012 Epoch 98/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0011 Epoch 99/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0012 Epoch 100/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0012
<keras.callbacks.History at 0x29c0cc2fa60>
NFLX_test = pd.read_csv('testNFLX.csv')
actual_stock_price = NFLX_test.iloc[:, 1:2].values
NFLX_total = NFLX.Open
inputs = NFLX_total[len(NFLX_total) - len(NFLX_test) - 60:].values
inputs = inputs.reshape(-1, 1)
inputs = scaler.transform(inputs)
X_test = []
for i in range(60,len(NFLX_test)):
X_test.append(inputs[i-60:i, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
predicted_stock_price = regressor.predict(X_test)
predicted_stock_price = scaler.inverse_transform(predicted_stock_price)
7/7 [==============================] - 1s 20ms/step
plt.plot(actual_stock_price, color = 'red', label = 'Actual NFLX stock price')
plt.plot(predicted_stock_price, color = 'blue', label = 'Predicted NFLX stock price')
plt.title('NFLX price prediction')
plt.ylabel('NFLX Stock Price')
plt.legend()
<matplotlib.legend.Legend at 0x29c176b7670>
metrics.explained_variance_score(actual_stock_price[:len(predicted_stock_price)], predicted_stock_price)
0.8724228613592165
GOOG.index = GOOG.Date
GOOG = GOOG.drop(['Date', 'Adj Close'], axis = 1)
GOOG.loc['2015-01-02':'2019-12-31'].to_csv('trainGOOG.csv', index = False)
GOOG.loc['2019-12-31':].to_csv('testGOOG.csv', index = False)
GOOG_train = pd.read_csv('trainGOOG.csv')
GOOG_train = GOOG_train.iloc[:, 1:2].values
print(GOOG_train.shape)
(1258, 1)
scaler = MinMaxScaler(feature_range = (0,1))
scaled_training_set = scaler.fit_transform(GOOG_train)
scaled_training_set
array([[0.04043898],
[0.0324873 ],
[0.02314352],
...,
[0.99946003],
[0.986213 ],
[0.96897918]])
X_train = []
y_train = []
for i in range(60, len(GOOG_train)):
X_train.append(scaled_training_set[i-60:i, 0])
y_train.append(scaled_training_set[i, 0])
X_train = np.array(X_train)
y_train = np.array(y_train)
print(X_train.shape)
print(y_train.shape)
(1198, 60) (1198,)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
X_train.shape
(1198, 60, 1)
regressor = Sequential()
regressor.add(LSTM(units = 60, return_sequences = True, input_shape = (X_train.shape[1], X_train.shape[2])))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60, return_sequences = True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60, return_sequences = True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60))
regressor.add(Dropout(0.2))
regressor.add(Dense(units = 1))
regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
regressor.fit(X_train, y_train, epochs = 100, batch_size = 32)
Epoch 1/100 38/38 [==============================] - 9s 60ms/step - loss: 0.0427 Epoch 2/100 38/38 [==============================] - 2s 54ms/step - loss: 0.0062 Epoch 3/100 38/38 [==============================] - 2s 54ms/step - loss: 0.0053 Epoch 4/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0047 Epoch 5/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0045 Epoch 6/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0041 Epoch 7/100 38/38 [==============================] - 2s 60ms/step - loss: 0.0042 Epoch 8/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0044 Epoch 9/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0041 Epoch 10/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0036 Epoch 11/100 38/38 [==============================] - 3s 71ms/step - loss: 0.0037 Epoch 12/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0037 Epoch 13/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0036 Epoch 14/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0037 Epoch 15/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0036 Epoch 16/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0036 Epoch 17/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0035 Epoch 18/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0035 Epoch 19/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0045 Epoch 20/100 38/38 [==============================] - 2s 66ms/step - loss: 0.0040 Epoch 21/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0028 Epoch 22/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0030 Epoch 23/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0031 Epoch 24/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0035 Epoch 25/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0028 Epoch 26/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0027 Epoch 27/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0028 Epoch 28/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0026 Epoch 29/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0028 Epoch 30/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0029 Epoch 31/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0027 Epoch 32/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0027 Epoch 33/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0026 Epoch 34/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0028 Epoch 35/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0027 Epoch 36/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0027 Epoch 37/100 38/38 [==============================] - 3s 71ms/step - loss: 0.0026 Epoch 38/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0025 Epoch 39/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0025 Epoch 40/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0025 Epoch 41/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0023 Epoch 42/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0023 Epoch 43/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0028 Epoch 44/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0023 Epoch 45/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0022 Epoch 46/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0024 Epoch 47/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0025 Epoch 48/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0024 Epoch 49/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0023 Epoch 50/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0021 Epoch 51/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0021 Epoch 52/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0024 Epoch 53/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0022 Epoch 54/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0018 Epoch 55/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0022 Epoch 56/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0019 Epoch 57/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0019 Epoch 58/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0019 Epoch 59/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0020 Epoch 60/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0020 Epoch 61/100 38/38 [==============================] - 2s 58ms/step - loss: 0.0019 Epoch 62/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0018 Epoch 63/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0017 Epoch 64/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0018 Epoch 65/100 38/38 [==============================] - 2s 60ms/step - loss: 0.0018 Epoch 66/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0018 Epoch 67/100 38/38 [==============================] - 2s 58ms/step - loss: 0.0018 Epoch 68/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0017 Epoch 69/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0018 Epoch 70/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0018 Epoch 71/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0018 Epoch 72/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0021 Epoch 73/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0016 Epoch 74/100 38/38 [==============================] - 2s 60ms/step - loss: 0.0016 Epoch 75/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0016 Epoch 76/100 38/38 [==============================] - 2s 58ms/step - loss: 0.0017 Epoch 77/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0019 Epoch 78/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0016 Epoch 79/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0017 Epoch 80/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0015 Epoch 81/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0015 Epoch 82/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0017 Epoch 83/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0016 Epoch 84/100 38/38 [==============================] - 3s 73ms/step - loss: 0.0016 Epoch 85/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0016 Epoch 86/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0015 Epoch 87/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0019 Epoch 88/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0014 Epoch 89/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0014 Epoch 90/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0014 Epoch 91/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0014 Epoch 92/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0012 Epoch 93/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0013 Epoch 94/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0013 Epoch 95/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0016 Epoch 96/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0015 Epoch 97/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0012 Epoch 98/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0012 Epoch 99/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0013 Epoch 100/100 38/38 [==============================] - 3s 73ms/step - loss: 0.0012
<keras.callbacks.History at 0x29c18d1cbb0>
GOOG_test = pd.read_csv('testGOOG.csv')
actual_stock_price = GOOG_test.iloc[:, 1:2].values
GOOG_total = GOOG.Open
inputs = GOOG_total[len(GOOG_total) - len(GOOG_test) - 60:].values
inputs = inputs.reshape(-1, 1)
inputs = scaler.transform(inputs)
X_test = []
for i in range(60,len(GOOG_test)):
X_test.append(inputs[i-60:i, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
predicted_stock_price = regressor.predict(X_test)
predicted_stock_price = scaler.inverse_transform(predicted_stock_price)
7/7 [==============================] - 1s 21ms/step
plt.plot(actual_stock_price, color = 'red', label = 'Actual GOOG stock price')
plt.plot(predicted_stock_price, color = 'blue', label = 'Predicted GOOG stock price')
plt.title('GOOG price prediction')
plt.ylabel('GOOG Stock Price')
plt.legend()
<matplotlib.legend.Legend at 0x29c23b0b5e0>
metrics.explained_variance_score(actual_stock_price[:len(predicted_stock_price)], predicted_stock_price)
0.9208285706423892
TSLA.index = TSLA.Date
TSLA = TSLA.drop(['Date', 'Adj Close'], axis = 1)
TSLA.loc['2015-01-02':'2019-12-31'].to_csv('trainTSLA.csv', index = False)
TSLA.loc['2019-12-31':].to_csv('testTSLA.csv', index = False)
TSLA_train = pd.read_csv('trainTSLA.csv')
TSLA_train = TSLA_train.iloc[:, 1:2].values
print(TSLA_train.shape)
(1258, 1)
scaler = MinMaxScaler(feature_range = (0,1))
scaled_training_set = scaler.fit_transform(TSLA_train)
scaled_training_set
array([[0.24356139],
[0.21948349],
[0.21127918],
...,
[1. ],
[0.97749165],
[0.94998933]])
X_train = []
y_train = []
for i in range(60, len(TSLA_train)):
X_train.append(scaled_training_set[i-60:i, 0])
y_train.append(scaled_training_set[i, 0])
X_train = np.array(X_train)
y_train = np.array(y_train)
print(X_train.shape)
print(y_train.shape)
(1198, 60) (1198,)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
X_train.shape
(1198, 60, 1)
regressor = Sequential()
regressor.add(LSTM(units = 60, return_sequences = True, input_shape = (X_train.shape[1], X_train.shape[2])))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60, return_sequences = True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60, return_sequences = True))
regressor.add(Dropout(0.2))
regressor.add(LSTM(units = 60))
regressor.add(Dropout(0.2))
regressor.add(Dense(units = 1))
regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')
regressor.fit(X_train, y_train, epochs = 100, batch_size = 32)
Epoch 1/100 38/38 [==============================] - 9s 57ms/step - loss: 0.0317 Epoch 2/100 38/38 [==============================] - 2s 54ms/step - loss: 0.0098 Epoch 3/100 38/38 [==============================] - 2s 60ms/step - loss: 0.0088 Epoch 4/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0088 Epoch 5/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0084 Epoch 6/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0069 Epoch 7/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0069 Epoch 8/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0067 Epoch 9/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0067 Epoch 10/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0058 Epoch 11/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0055 Epoch 12/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0051 Epoch 13/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0046 Epoch 14/100 38/38 [==============================] - 2s 60ms/step - loss: 0.0046 Epoch 15/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0047 Epoch 16/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0043 Epoch 17/100 38/38 [==============================] - 2s 58ms/step - loss: 0.0045 Epoch 18/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0043 Epoch 19/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0044 Epoch 20/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0041 Epoch 21/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0037 Epoch 22/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0036 Epoch 23/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0034 Epoch 24/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0034 Epoch 25/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0035 Epoch 26/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0035 Epoch 27/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0034 Epoch 28/100 38/38 [==============================] - 2s 60ms/step - loss: 0.0032 Epoch 29/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0032 Epoch 30/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0031 Epoch 31/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0033 Epoch 32/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0029 Epoch 33/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0030 Epoch 34/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0029 Epoch 35/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0026 Epoch 36/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0029 Epoch 37/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0030 Epoch 38/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0029 Epoch 39/100 38/38 [==============================] - 3s 71ms/step - loss: 0.0025 Epoch 40/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0027 Epoch 41/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0026 Epoch 42/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0024 Epoch 43/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0022 Epoch 44/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0023 Epoch 45/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0023 Epoch 46/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0022 Epoch 47/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0022 Epoch 48/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0023 Epoch 49/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0021 Epoch 50/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0022 Epoch 51/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0023 Epoch 52/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0024 Epoch 53/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0021 Epoch 54/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0020 Epoch 55/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0021 Epoch 56/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0020 Epoch 57/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0019 Epoch 58/100 38/38 [==============================] - 3s 73ms/step - loss: 0.0022 Epoch 59/100 38/38 [==============================] - 3s 74ms/step - loss: 0.0021 Epoch 60/100 38/38 [==============================] - 3s 82ms/step - loss: 0.0020 Epoch 61/100 38/38 [==============================] - 3s 73ms/step - loss: 0.0016 Epoch 62/100 38/38 [==============================] - 3s 68ms/step - loss: 0.0019 Epoch 63/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0018 Epoch 64/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0018 Epoch 65/100 38/38 [==============================] - 3s 74ms/step - loss: 0.0018 Epoch 66/100 38/38 [==============================] - 3s 75ms/step - loss: 0.0018 Epoch 67/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0016 Epoch 68/100 38/38 [==============================] - 3s 75ms/step - loss: 0.0017 Epoch 69/100 38/38 [==============================] - 2s 65ms/step - loss: 0.0017 Epoch 70/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0017 Epoch 71/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0017 Epoch 72/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0017 Epoch 73/100 38/38 [==============================] - 2s 66ms/step - loss: 0.0016 Epoch 74/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0015 Epoch 75/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0016 Epoch 76/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0015 Epoch 77/100 38/38 [==============================] - 3s 69ms/step - loss: 0.0014 Epoch 78/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0015 Epoch 79/100 38/38 [==============================] - 2s 62ms/step - loss: 0.0015 Epoch 80/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0018 Epoch 81/100 38/38 [==============================] - 2s 60ms/step - loss: 0.0015 Epoch 82/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0016 Epoch 83/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0016 Epoch 84/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0014 Epoch 85/100 38/38 [==============================] - 2s 60ms/step - loss: 0.0015 Epoch 86/100 38/38 [==============================] - 2s 60ms/step - loss: 0.0014 Epoch 87/100 38/38 [==============================] - 3s 66ms/step - loss: 0.0012 Epoch 88/100 38/38 [==============================] - 3s 67ms/step - loss: 0.0014 Epoch 89/100 38/38 [==============================] - 2s 63ms/step - loss: 0.0014 Epoch 90/100 38/38 [==============================] - 3s 71ms/step - loss: 0.0015 Epoch 91/100 38/38 [==============================] - 2s 64ms/step - loss: 0.0014 Epoch 92/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0014 Epoch 93/100 38/38 [==============================] - 2s 59ms/step - loss: 0.0014 Epoch 94/100 38/38 [==============================] - 2s 60ms/step - loss: 0.0014 Epoch 95/100 38/38 [==============================] - 2s 60ms/step - loss: 0.0013 Epoch 96/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0014 Epoch 97/100 38/38 [==============================] - 3s 70ms/step - loss: 0.0013 Epoch 98/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0012 Epoch 99/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0013 Epoch 100/100 38/38 [==============================] - 2s 61ms/step - loss: 0.0014
<keras.callbacks.History at 0x29c24b08640>
TSLA_test = pd.read_csv('testTSLA.csv')
actual_stock_price = TSLA_test.iloc[:, 1:2].values
TSLA_total = TSLA.Open
inputs = TSLA_total[len(TSLA_total) - len(TSLA_test) - 60:].values
inputs = inputs.reshape(-1, 1)
inputs = scaler.transform(inputs)
X_test = []
for i in range(60,len(TSLA_test)):
X_test.append(inputs[i-60:i, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
predicted_stock_price = regressor.predict(X_test)
predicted_stock_price = scaler.inverse_transform(predicted_stock_price)
7/7 [==============================] - 1s 17ms/step
plt.plot(actual_stock_price, color = 'red', label = 'Actual TSLA stock price')
plt.plot(predicted_stock_price, color = 'blue', label = 'Predicted TSLA stock price')
plt.title('TSLA price prediction')
plt.ylabel('TSLA Stock Price')
plt.legend()
<matplotlib.legend.Legend at 0x29c2fb8c640>
metrics.explained_variance_score(actual_stock_price[:len(predicted_stock_price)], predicted_stock_price)
0.4045991191183884